PDF文档转换成图片
本文作者:王碧琪
文字编辑:方 言
技术总编:张 邯
Python云端培训课程报名结束!
爬虫俱乐部将于2020年7月25日至28日举办的Python编程技术训练营招生工作已圆满结束,感谢大家对我们的支持!
Stata云端培训课程在腾讯课堂上线啦!
爬虫俱乐部于2020年7月中旬在线上举行的Stata编程技术培训课程在腾讯课堂上线啦!课程通过案例教学模式,帮助学员在短期内掌握Stata的基本命令、编程、数据处理以及结果输出等技术,并对Stata16的实用新功能做了详细介绍。
现在关注本公众号,即可获得课程链接;同时转发该推文立即领取600元课程优惠券,集赞50个再领200元课程优惠!(截图发至本公众号后台领取)原价2400元的课程,现在只要1600元!PDF是一种稳定性和安全性都很强的格式文件,有很多资料会选择采用PDF格式来保存,但是文件中的文字内容可以复制。为了防止这一点,我们可以将PDF再转换成JPG图片,这样就更加保护PDF文件中的信息了。之前我们了解了pymupdf库可以提取PDF中的文本信息,今天我们继续用它把PDF转换成图片文件。
一、简介
使用的库仍然是pymupdf。待处理文档名为“demo1”,共有三页,内容如下:
二、转换处理
(一)导入文件
import fitz
doc = fitz.open(f".\\pdfs\\ demo1.pdf")
print(doc)
print(doc.pageCount)
运行结果为:
fitz.Document('.\pdfs\demo1.pdf')
3
结果显示,fitz处理之后的文档“demo1”文件共有3页。
(二)转换成图片
下面是几个常用的用法。
方法 | 含义 |
---|---|
Matrix.preRotate(deg) | 旋转。填入旋转角度(以度为单位)。 |
Matrix.preScale(sx,sy) | 缩放。sx表示x方向上的缩放系数,sy表示y方向上的缩放系数。 |
Matrix.preShear(sx,sy) | 剪切(倾斜)。sx表示x方向上的剪切效果,sy表示y方向上的剪切效果。 |
init(self, zoom-x, zoom-y) | 指定缩放值。 |
init(self, shear-x, shear-y, 1) | 指定剪切值。 |
首先设置转换的参数。利用Matrix()可以设置图片的大小、旋转的角度等。
rotate = int(0) # 设置图片的旋转角度为0
zoom_x = 2.0 # 设置图片相对于PDF文件在X轴上的缩放比例为2
zoom_y = 2.0 # 设置图片相对于PDF文件在Y轴上的缩放比例为2
trans = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate)
print(f"{filename}开始转换...")
接下来进行转换,利用page.getPixmap()用于创建一个pixmap,把设置好的转换参数填入。Pixmap(“pixel maps”)是mupdf渲染功能的核心。它们代表像素的平面矩形集。每个像素由定义其颜色的多个字节(“components”)以及定义其透明度的可选alpha字节描述。
再用writeImage( )把转换好的图片输出。它的语法是:writeImage(filename, output=None)。filename填入文件名,output是输出的图片格式,默认值为文件的扩展名,无法识别时假定为png。
for pg in range(doc.pageCount):
page = doc[pg] # 获得第pg页
pm = page.getPixmap(matrix=trans, alpha=False) # 创建pixmap
pm.writeImage(f"{filename}-{pg+1}.jpg") # 输出为jpg图片格式
print(f"{filename}转换完成!")
运行结果如下:
demo1开始转换...
demo1转换完成!
去看一下工作路径下生成的图片:
大功告成!利用pymupdf库的几个函数成功把PDF文档变成了不可编辑的图片。
PDF文本信息提取(二)
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。